<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>闭包</title>
</head>
<body>

</body>
<script>

    /*1. 立刻执行函数*/
    ( function (message) {
      // alert('hello'+" " + message);
   })("world")

   /*
    * 2.闭包
    *    1. 函数内部嵌套了函数
    *    2. 函数内部可以引用函数外部的参数或者变量
    *    3. 参数或者变量不会被垃圾回收机制回收
   * */
  /* function foo() {
       var name = 'Mart';
       return function () {
           alert("hello"+ " " + name);
       }
   }
   var boo = foo();
   boo();*/

  /* function foo() {
       var num = 0;
       return function () {
           var m=0;
           console.log("outter:"+(++num));
           console.log("inner:"+(++m));
       }
   }
   /!**
    * 1. 定义函数内部的变量
    * 会在函数执行结束后被垃圾回收
    * 2. 函数引用函数外部的变量，
    *   只要这种引用关系存在，被引用的变量就不会被垃圾回收
   * *!/

   var boo = foo();
   boo();
   boo();
   boo();*/

  /*
   * js(es5)没有块级作用域
  * */
  var arr =[];

 /* for (var i=0;i<5;i++){

      arr[i]=function () {
          alert(i)
      }

  }*/

    for (var i=0;i<5;i++){
        arr[i]=(function (index) {
           return function(){
               alert(index)
           }
        })(i)
    }
 // console.log(i);

    arr[3]();
  /*  var arr2 = arr[2];
    arr2();*/

</script>
</html>